const jwt = require('jsonwebtoken');
const config = require('../config');

/**
 * JWT 认证中间件
 * @param {Object} ctx Koa 上下文
 * @param {Function} next 下一个中间件
 */
async function verifyToken(ctx, next) {
    try {
        // 从header获取token
        const token = ctx.headers.authorization?.split(' ')[1];
        console.log('Received token:', token);

        if (!token) {
            ctx.status = 401;
            ctx.body = { 
                status: 0,
                error: 'No token provided',
                message: '未提供认证令牌'
            };
            return;
        }

        try {
            // 验证token
            const decoded = jwt.verify(token, config.jwt.secret);
            ctx.state.user = decoded;
            await next();
        } catch (err) {
            console.error('Token verification failed:', err);
            ctx.status = 401;
            ctx.body = { 
                status: 0,
                error: 'Invalid token',
                message: '无效的认证令牌'
            };
        }
    } catch (err) {
        console.error('Auth middleware error:', err);
        ctx.status = 500;
        ctx.body = { 
            status: 0,
            error: 'Internal server error',
            message: '服务器内部错误'
        };
    }
}

module.exports = verifyToken;